/**
 * 用户相关服务
 */
const util = require('../utils/util.js');
const api = require('../config/api.js');
/**
 * @method
 * 提交用户基本信息，进行服务器登录，获得登录token
 * 受微信的限制，本函数需要在 <button open-type="getUserInfo" bindgetuserinfo="bindGetUserInfo"></button> 的回调函数中调用
 * 需要先使用 <button> 弹窗，让用户接受授权，然后再安全调用 wx.getUserInfo 获取用户信息
 */
function loginByWeixin() {
  let code = null;
  return new Promise(function (resolve, reject) {
    return util.login().then((res) => {
      code = res.code;
      return util.getUserInfo();
    }).then((userInfo) => {
      //登录远程服务器
      util.request(api.AuthLoginByWeixin, { code: code, userInfo: userInfo }, 'GET').then(res => {
        if (res.errno === 0) {
          //存储用户信息
          wx.setStorageSync('userInfo', res.data.userInfo);
          wx.setStorageSync('token', res.data.token);
          resolve(res);
        } else {
          reject(res);
        }
      }).catch((err) => {
        reject(err);
      });
    }).catch((err) => {
      reject(err);
    })
  });
}
/**
 * @method
 * code静默登陆，获得登录token
 * 此登陆过程用户无感知
 */
function Login(){
  return new Promise(function (resolve, reject) {
    return util.login().then((res) => {
      return util.wxrequest(api.AuthLoginByWeixin, { code: res.code }, 'GET').then((res) => {
        //console.log(res)
        if (res.errno === 0) {
          //成功
          wx.setStorageSync('userInfo', res.data.userInfo);
          wx.setStorageSync('token', res.data.token);
          resolve(res);          
        } else {
          //失败
          reject(res);
        }
      }).catch((err) => {
        reject(err);
      });
    }).catch((err) => {
      reject(err);
    })
  });
}
/*
 *退出登录 
 */
function Logout() {
  return new Promise(function (resolve, reject) {
    try {
      wx.removeStorageSync('token');
      wx.removeStorageSync('userInfo');
      resolve(true);
    } catch (e) {
      console.log("catch:", e);
      reject(false);
    }
  });
}
/**
 * 判断用户是否登录
 */
function checkLogin() {
  return new Promise(function (resolve, reject) {
    if (wx.getStorageSync('userInfo') && wx.getStorageSync('token')) {
      //校验微信Session
      checkSession().then(() => {
        //校验网站token
        checkToken().then(() => {
          resolve(true);
        }).catch(() => {
          reject(false);
        });
      }).catch(() => {
        wx.removeStorageSync('token');
        wx.removeStorageSync('userInfo');
        reject(false);
      });
    } else {
      reject(false);
    }
  });
}
/**
 * 检查微信会话是否过期
 */
function checkSession() {
  return new Promise(function (resolve, reject) {
    wx.checkSession({
      success: function () {
        resolve(true);
      },
      fail: function () {
        reject(false);
      }
    })
  });
}
/**
 * 判断token是否过期
 */
function checkToken(){
  let token = wx.getStorageSync('token');
  return new Promise(function (resolve, reject) {
    //尝试静默登陆
      util.get(api.AuthLoginByWeixin, {skey: token}).then((res) => {
      //console.log(res)
      if (res.errno === 0) {
        //成功
        resolve(true);
      } else {        
        //失败
        wx.removeStorageSync('token');
        wx.removeStorageSync('userInfo');
        reject(false);
      }
    }).catch((err) => {
      console.log(err)
      reject(false);
    })
  });
}
module.exports = {
  loginByWeixin,
  checkLogin,
  Login,
  Logout,
};